你知道對大廚來說,他的眾多工作職責中哪一個最重要嗎?
也許你的第一個想法可能會是做菜好吃最重要,但在大廚眼中,做菜好吃只能排第二,他們認為最重要的其實是準備工作。
為什麼是準備工作呢?
因為在餐廳的菜單中,其實隱含著大廚對顧客的承諾,就是你點什麼我就能做什麼。要履行這個承諾,大廚都會在前一天把東西準備好,否則客人點了菜,你發現缺了這個食材少了那各調味料,那客人的餐點就無法按時出菜。
如果是準備宴會的話,他們需要決定上菜的順序,每道菜大約要做多少的時間,什麼時間點要擺什麼盤子裝什麼菜,什麼時候要送菜。
所以菜單其實就是 Product Backlog,每道菜就是 Item, 準備工作所做的就是釐清這些菜要有哪些食材,調味料,烹飪方法,怎麼擺盤,要做多久等等。
在敏捷裡面也有一個專門在做準備工作的會議 - Refinement meeting。 我們來看看 Scrum Guide 裡 Refinement 要做什麼
Product Backlog refinement is the act of adding detail, estimates, and order to items in the Product Backlog
這些是不是跟大廚所做的準備工作是一樣的。
不過還有一些實務上的細節必須要注意的。例如我們剛剛說的食材或調味料沒有準備好,就無法出菜了。我們在開發時也是一樣,如果有一些必需的東西沒有準備好,那我們的 Item 就沒有辦法完成了。
為了避免缺少這些必要的東西,所以在 Refinement 時,我們其實就知道需要哪些東西才能完成這個 Item,我們就可以先行準備,也就有所謂的 DoR (Definition of Ready) 這個概念的誕生。
大廚還有一個值得我們學習的部分,務必完成的心態,也就是做完。
一道菜只要開始加工,他們就會爭取在最短的時間內把它做完,送到客人的餐桌上。你應該沒有看過第一道菜做一半跑去做第二道菜,第二道菜還沒裝盤就跑去做第三道菜的,這樣前面兩道菜都沒辦法上,也就是都是半成品,這些是沒有價值的。
我們在軟體開發上也是要避免產生半成品。會有半成品很可能就是你的準備工作沒有做好,你必需等東等西的。